iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
0
Modern Web

Ruby on Rails面試題挑戰系列 第 23

Ruby on Rails面試題挑戰 Day23 - Fat models, Skinny controllers和 Skinny controllers, Skinny models的意思為何?

  • 分享至 

  • xImage
  •  

What is the meaning of “Fat models, Skinny controllers” and “Skinny controllers, Skinny models”?
“Fat models, Skinny controllers” 和 “Skinny controllers, Skinny models”是什麼意思?


Fat models, Skinny controllers

一開始新手剛開始寫rails的習慣會將許多商業邏輯直接寫到controller裡面,但這樣會造成controller變得很龐大,而Model則只有少少的程式碼,而形成Fat controllers, skinny models的情況。

而更好的方式是,商業邏輯應該寫在Model裡,而不是controller,這讓這些邏輯更容易測試,也易於重複使用。

Controller的角色應該是views與models之前傳遞訊息的角色,太龐大會讓整個程式碼不好理解與維護,可以適時的利用callback來減少重複的程式碼。
當商業邏輯都移到model後就會形成Fat models, skinny controllers的狀況。

Skinny controllers, Skinny models

Fat models, Skinny controllers是很好的第一步,但當程式越來越多,龐大的Model就會漸漸難管理,而且有些商業邏輯找不到適合的model來存放,根據所謂SRP(single responsibility priciple)的原則,也就是Model主要的目的應該是藉由它來連結與資料庫的資料做連結。我們可以利用其他的設計模式(像是Service Object)漸漸將某些邏輯移出Model,幫助Model瘦身,就成了Skinny controllers, Skinny model。

至於Service Object是什麼,就留給明天來介紹吧!

你可以這樣回答:

剛學Ruby時,總是會被告誡要將商業邏輯寫在Model而不是Controller,這樣讓這些商業邏輯容易測試且較好重複使用,而Controller則是維持view與model之前資料交換的角色就好,就會有Fat models Skinny controllers的情況。

但隨著程式漸漸長大,龐大的Model會變得難以管理,我們可以利用像Service Object的設計模式來將某些邏輯移出Model,也維持Model的簡潔,而形成Skinny controllers, Skinny model。

參考資料

1.Rails: skinny controller, skinny model

2.53 Ruby on Rails Interview Questions and Answers


上一篇
Ruby on Rails面試題挑戰 Day22 - count、length和size的差異?
下一篇
Ruby on Rails面試題挑戰 Day24 - 什麼是PORO?
系列文
Ruby on Rails面試題挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言